Colors {
    Colors.black = rgba(0.0, 0.0, 0.0, 1.0)
    Colors.gray = rgba(0.8, 0.8, 0.8, 1.0)
    Colors.darkgray = rgba(0.6, 0.6, 0.6, 1.0)
    Colors.red = rgba(1.0, 0.0, 0.0, 1.0)
    Colors.yellow = rgba(1.0, 1.0, 0.0, 1.0)
    Colors.orange = rgba(1.0, 0.6, 0.0, 1.0)
    Colors.lightorange = rgba(1.0, 0.6, 0.0, 0.25)
    Colors.green = rgba(0.0, 1.0, 0.0, 1.0)
    Colors.blue = rgba(0.0, 0.0, 1.0, 1.0)
    Colors.lightblue = rgba(0.0, 0.0, 1.0, 0.25)
    Colors.cyan = rgba(0.0, 1.0, 1.0, 1.0)
    Colors.purple = rgba(0.5, 0.0, 0.5, 1.0)
    Colors.white = rgba(1.0, 1.0, 1.0, 1.0)
    Colors.none = rgba(0.0, 0.0, 0.0, 0.0)
    Colors.lightblue2 = rgba(0.82, 0.88, 0.94, 1.0)
}

global {
       global.pi_over_four = 0.78
       global.half_pi = 1.57
       global.pi = 3.14
       global.two_pi = 6.28
}

Point p {
      p.shape = Circle {
      	      x = -100.0
	      y = -200.0
	      r = 10.0
	      color = Colors.red
	      strokeWidth = 0.0
      }
}

Set X {
    X.width = 100.0
    X.height = 200.0
    X.x = OPTIMIZED
    X.y = OPTIMIZED
    X.angle = OPTIMIZED

    X.shape = RectangleTransform {
        strokeWidth = 0.0
	transform = transformSRT(X.width, X.height, X.angle, X.x, X.y)
    }

    -- TODO: need to apply the transform, otherwise X and y are still 0
    -- Should this get the X.x or the finalX?

    X.text = Text {
      string = X.label
      x = X.shape.x 
      y = X.shape.y
    }

    LOCAL.layering  = X.shape below X.text
}

Set `A` {
    override `A`.shape.color = setOpacity(Colors.red, 0.5)
}

Set `B` {
    override `B`.width = 200.0 -- NOT B.shape.width
    override `B`.height = 100.0
    override `B`.shape.color = setOpacity(Colors.green, 0.5)
}

Set `C` {
    override `C`.shape.color = setOpacity(Colors.blue, 0.5)
}

Set `A`; Set `B` {
   LOCAL.objFn = encourage optTransformedShapes(`A`.shape, `B`.shape)
}
